package com.hendyirawan.wordnet; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import au.com.bytecode.opencsv.CSVReader; import au.com.bytecode.opencsv.CSVWriter; import com.google.common.base.Preconditions; /** * Convert WordNet 3.0 Core synsets to WordNet 3.1 Core synsets. * */ public class Wn30MsaToWn31 { private static final Logger log = LoggerFactory .getLogger(Wn30MsaToWn31.class); public static void main( String[] args ) throws IOException { Preconditions.checkArgument(args.length == 2, "Usage: wn30msa-to-wn31 path/to/wn-msa-all.tab dest/dir"); File wn30coreFile = new File(args[0]); File wn31TsvFile = new File(args[1], "wn31-msa-all.tab"); log.info("Loading wn30-msa '{}' (and converting to wn31-msa '{}')...", wn30coreFile, wn31TsvFile); int index = 1; try (CSVWriter writer = new CSVWriter(new FileWriter(wn31TsvFile), '\t', CSVWriter.NO_QUOTE_CHARACTER)) { try (CSVReader reader = new CSVReader(new FileReader(wn30coreFile), '\t')) { while (true) { String[] row = reader.readNext(); if (row == null) { break; } String wn30sense = row[0]; char posLetter = wn30sense.charAt(9); final Integer posNumeric = Preconditions.checkNotNull(Wn30ToWn31.POS_NUMERIC.get(posLetter), "Invalid part-of-speech letter code '%s' for sense '%s'", posLetter, wn30sense); String wn31sense = posNumeric + wn30sense; writer.writeNext(new String[] { wn31sense, row[1], row[2], row[3] }); index++; } } } log.info("Converted {} rows", index); } }